package ar.edu.unsam.algo3.plantasvszombies.dominio

import java.util.ArrayList
import java.util.List
import org.uqbar.commons.model.UserException
import org.uqbar.commons.utils.Observable

@Observable
class Batalla {
	@Property Zombie zombie
	@Property Fila fila
	@Property String salida = "Inicio del juego\n"
	@Property List<String> resultado = new ArrayList<String>

	def atacar() {
		if (fila.plantas.size == 0) {
			throw new UserException("No se puede atacar una fila vacía")
		}
		this.resultado.add("Inicio del juego")
		while (this.sigueJuego) {
			val Planta planta = fila.PlantaDeAtaque
			resultado.add("    " + zombie.nombre + " ataca " + planta.nombre)
			zombie.atacar(planta)
			planta.atacar(zombie)
		}
		zombie.salud = zombie.defensa
	}

	def boolean sigueJuego() {
		val Planta planta = fila.PlantaDeAtaque
		if (!zombie.sigueVivo) {
			this.zombie.morir(fila)
			resultado.add(zombie.nombre + " murio")
			return false
		}
		if (!planta.sigueVivo) {
			planta.morir(fila)
			fila.plantas.remove(planta)
			resultado.add("        " + planta.nombre + " murio")
			if (fila.plantas.empty) {
				resultado.add("No quedan más plantas en la fila. Perdiste")
				return false
			}
		}
		true
	}
}
